home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / sheltool / gwav / src / gwav.c < prev    next >
C/C++ Source or Header  |  1994-09-20  |  31KB  |  991 lines

  1. /************************************************************************/
  2. /*                       PCM Player 'GWAV' V1.1 L20                        */
  3. /*                                                                        */
  4. /*                               üwGWAV.EXGüx                            */
  5. /*                                                                        */
  6. /*                    Copyright(C) 1994 by âüâïâLâàü[âï                    */
  7. /************************************************************************/
  8. /*    âVâFâïâAâvâèé╞é╡é─é═üAé┘é╞é±é╟ì┼Æßî└é╠é▒é╞é╡é⌐é╡é─éóé╚éóé¬üAé╞éΦéá    */
  9. /*    éªé╕ô«éóé─éóéΘé╠é┼éµé╡é╞é╖éΘ(âüâéâèòsæ½Ä₧é╠ô«ì∞é╔òsê└éáéΦücé┘é╞é±é╟    */
  10. /*    æ╬ì⌠é╞é┴é─é╚éóé╡)                                                    */
  11. /*    é╚é¿üAû{ùêé═üASNDé╞WAVé╠Äæî╣é═â^âXâNÉ╪éΦæ╓éªÄ₧é╔æ▐ö≡ò£î│é╡é─éΓéτé╚    */
  12. /*    é¡é─é═é╚éτé╚éóé╠é╛é¬üAé╗éñé╖éΘé╞âoâbâNâOâëâEâôâhé┼ë╣é¬û┬éτé╚é¡é╚é┴    */
  13. /*    é─é┬é▄éτé╚éóé╠é┼üAéáéªé─ï¡ìsé╡é─éóéΘ                                */
  14. /*    é╛é⌐éτüAé┘é±é╞é═éáé▄éΦÉ^Äùé╡é─é┘é╡é¡é╚éóüc(^^;                        */
  15. /*    é╗éΩé⌐éτüAé╞é▒éδé╟é▒éδî╗éΩéΘ'EIN_'è╓Éöé═EIN(TM)âvâìâWâàâNâgé╠è╓ÉöîQ    */
  16. /*    é┼üAÅIù╣Ä₧é╠ì└òWé≡ïLë»é╖éΘâèâWâàü[âÇâ}âlü[âWââé╞é╡é─Ägùpé╡é─éóéΘ    */
  17. /*    GUIâëâCâuâëâèé╠è╓ÉöîQé╞é═êßéñé╠é┼üAEINTM.LIBé≡ægé▌ì₧é▄é╚éóé╞Ägùp    */
  18. /*    é┼é½é╚éó                                                            */
  19. /************************************************************************/
  20. /*    ÆìüFâRâôâpâCâïÄ₧é╔warningé¬ÅoéΘé¬üAûΓæΦé╚éóé╠é¬éφé⌐é┴é─éóéΘé╠é┼û│Äï    */
  21. /************************************************************************/
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24. #include <string.h>
  25. #include <winb.h>
  26. #include <te.h>
  27. #include <fntb.h>
  28. #include <gui.h>
  29. #include <egb.h>
  30. #include <guidbg.h>
  31. #include <file_dlg.h>
  32. #include <snd.h>
  33. #include <wav.h>
  34. #include "eintm.h"                /*    EIN(TM)è┬ï½ùpâëâCâuâëâè                */
  35.  
  36. char    *guiEgbPtr ;            /*    EGB é╠âÅü[âNâAâhâîâX                */
  37.  
  38. /*    òöòiIDùpò╧Éöé╠ÆΦï`                                                    */
  39. int    backId = -1 ;
  40. int    quitBtnId = -1 ;
  41. int    fnameBtnId = -1 ;
  42. int    fnameMesId = -1 ;
  43. int    fileSlctId = -1 ;
  44. int    wavPlayBtnId = -1 ;
  45. int    wavStopBtnId = -1 ;
  46.  
  47. /*    PCMé╠â`âââlâïÄwÆΦ                                                    */
  48. #define    ch        69
  49.  
  50. /* âèâWâàü[âÇÅεò±ô╟é▌Åæé½âoâbâtâ@é╠âTâCâY(âAâvâèî┼ùLé╚é╠é┼ùvÆ▓É«)        */
  51. #define    RBUFSIZE    (1024)
  52.  
  53. int        mute_data ;                /*    ôdÄqâ{âèâàü[âÇé╠â~âàü[âgò█æ╢ùp        */
  54. int        wavFlag = FALSE ;        /*    WAVâtâ@âCâïì─É╢âéü[âh                */
  55. char    *wavBuffer = NULL ;        /*    PCMâfü[â^èiö[ùpâoâbâtâ@é╓é╠â|âCâôâ^    */
  56. char    fileName[32] ;            /*    âtâ@âCâïû╝âoâbâtâ@(ëµû╩ò\ĪÉΩùp)    */
  57. char    path[80] = "\0" ;        /*    âpâXû╝âoâbâtâ@                        */
  58. int        freq, bitno, kind, pcmLen, pcmStart ;
  59.                                 /*    WAVâëâCâuâëâèùpâpâëâüü[â^            */
  60. int        saveDrv ;                /*    âJâîâôâgâhâëâCâuæ▐ö≡ùp                */
  61. char    saveDir[68] = "\0" ;    /*    âJâîâôâgâfâBâîâNâgâèæ▐ö≡ùp            */
  62. FRAME    rsmFrame ;                /*    âèâWâàü[âÇÄ₧é╔òKùvé╚òöòiì└òW        */
  63. char    RSMID[] = "%%% PCM Player GWAV %%%" ;
  64.                                 /*    âèâWâàü[âÇâtâ@âCâïùpé╠âLü[ò╢ÄÜù±    */
  65. char    version[] = "PCM Player 'GWAV' V1.1L20" ;
  66.                                 /*    âoü[âWâçâôò\ïL(â^âXâNû╝)            */
  67. char    copyright[] = "Copyright(C)1994 âüâïâLâàü[âï(Jun Somekawa)" ;
  68.                                 /*    Copyrightò\ïL                        */
  69.  
  70. /************************************************************************/
  71. /*    TownsâVâFâïî─é╤Åoé╡è╓Éö                                                */
  72. /************************************************************************/
  73. int userFunc(apliId, messId, info, data)
  74. int    apliId ;
  75. int    messId ;
  76. int    info ;
  77. int    data ;
  78. {
  79.     register int    ret ;
  80.     POOLDATA        *ptr ;
  81.     int                sw ;
  82.     WINCTRL            *pctrl ;
  83.     int                dx, dy ;
  84.     HYPER            hyp ;
  85.  
  86.     extern char    *splitFileName() ;
  87.     extern int    cbAnalysis() ;
  88.  
  89.     ret = ILLEGAL_FUNCTION ;
  90.  
  91.     switch(messId)
  92.     {
  93.         /*    âAâNâeâBâué╔é╚é┴é╜é╞é½é╠Åêù¥                                */
  94.         /*    òüÆ╩é═éáé▄éΦGM_WAKEÄ₧é╠Åêù¥é≡ïLÅqé╖éΘé▒é╞é═é╚éó                */
  95.         case    GM_WAKE :
  96.             /*    éαé╡üAGWAVé¬ëµû╩èOé╔Æ╟éóÅoé│éΩé─éóéΘéµéñé╚ÅΩìçüA        */
  97.             /*    âAâNâeâBâué╔é╡é─éαæÇì∞é┼é½é╚é¡é╚éΘé╜é▀üAëµû╩ôαé╔        */
  98.             /*    ê┌ô«é╖éΘÅêù¥é≡ìséñ                                        */
  99.             dx = dy = 0 ;
  100.             MMI_GetControl(&pctrl) ;    /*    ëµû╩é╠æσé½é│é≡ĵô╛é╖éΘ        */
  101.             MMI_SendMessage(backId, MM_GETHYPER, 1, &hyp) ;
  102.             if (hyp.fr.lupx > pctrl->bound.rdwx)
  103.                 dx = pctrl->bound.rdwx - hyp.fr.lupx -
  104.                                             (hyp.fr.rdwx - hyp.fr.lupx) ;
  105.             if (hyp.fr.lupy > pctrl->bound.rdwy)
  106.                 dy = pctrl->bound.rdwy - hyp.fr.lupy -
  107.                                             (hyp.fr.rdwy - hyp.fr.lupy) ;
  108.             if (dx != 0 || dy != 0)
  109.             {
  110.                 /*    ê┌ô«é╔é═üAÅ┴ïÄé╡é─ì└òWê┌ô«é╡é─é⌐éτò\Īé╖éΘé╞éóéñ    */
  111.                 /*    Æ┤î┤ÄnôIé╚ò√û@é≡ì╠ùp                                */
  112.                 /*    é┘é±é╞é═âNâèâbâvé≡éñé▄é¡Ägé┴é─ì─ò`ëµé╡é╜é┘éñ鬠       */
  113.                 /*    é⌐é┴é▒éóéóé±é╛é»é╟üc                                */
  114.                 MMI_SendMessage(backId, MM_ERASE, 0) ;
  115.                 MMI_SendMessage(backId, MM_MOVE, 2, dx, dy) ;
  116.                 MMI_SendMessage(backId, MM_SHOW, 0) ;
  117.             }
  118.             break ;
  119.  
  120.         /*    âüâéâèòsæ½Ä₧é╠Åêù¥                                            */
  121.         /*    æ╝é╠â^âXâNé┼âüâéâèé¬é╚éóéτé╡éóé╠é┼üAë≡ò·é╡é─éáé░éµéñ        */
  122.         case    GM_PURGE :
  123.             /*    PCMâfü[â^ùpé╠âoâbâtâ@é≡Ä¥é┴é─éóé╜éτë≡ò·é╖éΘ                */
  124.             if (wavBuffer != NULL)
  125.             {
  126.                 TL_free(wavBuffer) ;
  127.                 wavBuffer = NULL ;    /*    âoâbâtâ@é¬é╚éóé╠é┼üANULLé╔é╖éΘ    */
  128.                 ret = NOERR ;
  129.             }
  130.             break ;
  131.  
  132.         /*    â^âXâNÅIù╣Ä₧é╠Åêù¥                                            */
  133.         case    GM_QUIT :
  134.             /*    ì─É╢Æåé╚éτüAì─É╢é≡ÆåÄ~é╖éΘ                                */
  135.             /*    ÆΓÄ~â{â^âôé≡ëƒé╖éµéñé╔î─é╤Åoé╡è╓Éöé≡Ä└ìsé╖éΘé╛é»        */
  136.             MMI_SendMessage(quitBtnId, MM_EXEC, 2, 0, 0) ;
  137.             ret = NOERR ;
  138.             break;
  139.  
  140.         /*    â^âXâNé╠êΩÄ₧ÆΓÄ~Ä₧é╠Åêù¥                                    */
  141.         /*    GM_PAUSEé╠â^âCâ~âôâOé┼é═é╞é╔é⌐é¡üAéαé╞é╠Å≤æ╘é╔ë┬ö\é╚î└éΦ    */
  142.         /*    ò£î│é╖éΘé▒é╞é≡ûYéΩé─é═éóé»é╚éó                                */
  143.         /*    æ╝é╠â^âXâNé¬é╖é╫é─é╠Äæî╣é≡ÉΩùLé╖éΘë┬ö\ɽé¬éáéΘé╠é┼üA        */
  144.         /*    é╞é╔é⌐é¡ïNô«æOé╞é┘é┌ô»é╢Å≤æ╘é╔û▀é╖éµéñôwù═é╖éΘ                */
  145.         case    GM_PAUSE :
  146.             /*    ì─É╢Æåé╚éτüAì─É╢é≡ÆåÄ~é╖éΘ                                */
  147.             /*    ÆΓÄ~â{â^âôé≡ëƒé╖éµéñé╔î─é╤Åoé╡è╓Éöé≡Ä└ìsé╖éΘé╛é»        */
  148.             MMI_SendMessage(wavStopBtnId, MM_EXEC, 2, 0, 0) ;
  149.             SND_elevol_mute(mute_data) ;        /*    â~âàü[âgÅ≤æ╘é≡û▀é╖    */
  150.             ret = NOERR ;
  151.             break ;
  152.  
  153.         /*    â^âXâNé╠ô«ì∞ì─èJÄ₧é╠Åêù¥                                    */
  154.         /*    GM_PAUSEé╞ö╜æ╬é╔üAÄ⌐â^âXâNé¬ô«ì∞ë┬ö\é╔é╚éΘéµéñé╔Åêù¥é╖éΘ    */
  155.         case    GM_CONTINUE :
  156.             /*    ì─é╤ì─É╢ë┬ö\é╚éµéñé╔ì─É▌ÆΦé≡ìséñ                        */
  157.             mute_data = SND_get_elevol_mute(0) ;/*  â~âàü[âgÅεò±é╠ĵô╛    */
  158.             SND_elevol_mute(mute_data | 0x01) ;    /*  PCMé╠â~âàü[âgé≡ë≡Å£    */
  159.             ret = NOERR ;
  160.             break;
  161.  
  162.         /*    âvü[âïé⌐éτâfü[â^é╠æùÉMé≡Ä≤é»é╜Ä₧é╠Åêù¥                        */
  163.         /*    GWAVé┼é═âpâëâüü[â^ò╢ÄÜù±é≡Ä≤é»ÄµéΘé╛é»                        */
  164.         case    GM_SENDDATA :
  165.             /*    âpâëâüü[â^ò╢ÄÜù± é╠Ä≤é»ÄµéΦ                                */
  166.             if ((ptr = (POOLDATA *)MMI_CallMessage(MMI_GetApliId(),
  167.                                 GM_POOLDATA, PM_POOLID, data)) != NULL)
  168.             {
  169.                 if (!strcmp((char *)&ptr->Type, POOL_STR_CB))
  170.                 {
  171.                     sw = cbAnalysis(ptr) ;
  172.                     if (sw != ILLEGAL_FUNCTION)
  173.                     {
  174.                         if (info == MMI_GetApliId())
  175.                         {
  176.                             MMI_CallMessage(MMI_GetApliId(), GM_STACKDATA,
  177.                                                             FALSE, data) ;
  178.                         }
  179.                         /*    pathé╔âpâëâüü[â^ò╢ÄÜù±é¬ôⁿé┴é─éóéΘé╠é┼üA    */
  180.                         /*    âüâbâZü[âWî^òöòié╔âtâ@âCâïû╝òöò¬é╠é▌É▌ÆΦ    */
  181.                         MMI_SendMessage(fnameMesId, MM_SETMSG, 1,
  182.                                         splitFileName(fileName, path)) ;
  183.                         MMI_SendMessage(fnameMesId, MM_SHOW, 0) ;
  184.  
  185.                         /*    PCMâfü[â^âoâbâtâ@é≡ë≡ò·é╡é─üAÅëè·ë╗é╖éΘ        */
  186.                         /*    é╗éñé┼é╚éóé╞ÉVé╡éóâfü[â^é¬ô╟é▀é╚éó            */
  187.                         if (wavBuffer != NULL)
  188.                         {
  189.                             TL_free(wavBuffer) ;
  190.                             wavBuffer = NULL ;
  191.                         }
  192.                         /*    ë╣É║ì─É╢èJÄn                                */
  193.                         MMI_SendMessage(wavPlayBtnId, MM_EXEC, 2, 0, 0) ;
  194.                         ret = NOERR ;
  195.                     }
  196.                 }
  197.             }
  198.             break ;
  199.     }
  200.  
  201.     return ret ;
  202. }
  203.  
  204. /************************************************************************/
  205. /*    mainè╓Éö                                                            */
  206. /*    GUIâWâFâlâîü[â^é┼âVâFâïâAâvâèùpé╔É╢ɼé╡é╜ÅΩìçüAé▒é±é╚è┤é╢é╔é╚éΘ        */
  207. /*    é╜é╛é╡üAargcé╞argvé═Æ╟ë┴òöò¬                                        */
  208. /************************************************************************/
  209. void main(int argc, char *argv[])
  210. {
  211.     static MMICTRL mmi ={
  212.                 SCREEN16 | SCREENIGNORE,    /*    âyü[âW0æñë≡æ£ôx(16ÉF)    */
  213.                 SCREENUNUSED,                /*    âyü[âW1æñë≡æ£ôx            */
  214.                 0,                             /*    Åæé½ì₧é▌âyü[âW            */
  215.                 SCREENAVAILABLE,             /*    ò\Īâyü[âW(ÉFÉöû│ê╦æ╢)    */
  216.                 0,                             /*    ò\ĪâvâëâCâIâèâeâB        */
  217.                 SCREENAVAILABLE,            /*    ÉFÉö(ëµû╩ÿgÄ⌐ô«É▌ÆΦ)    */
  218.                 SCREENEXPAND,                 /*    VRAMé╠ëíé╠Æ╖é│            */
  219.                                             /*            (ë≡æ£ôxû│ê╦æ╢)    */
  220.                 0,                             /*    âüâéâèù╠êµé╠æσé½é│        */
  221.                 NULL,                         /*    âüâéâèù╠êµé╠âAâhâîâX    */
  222.                 0,                             /*    âåü[âUù╠êµé╠æσé½é│        */
  223.                 NULL,                         /*    âåü[âUù╠êµé╠âAâhâîâX    */
  224.                 0, 0,                         /*    ëµû╩ÿg    lupx,lupy        */
  225.                 0, 0,                        /*            rdwx,rdwy        */
  226.                 -16384, -16384,                /*    ê┌ô«ÿg    lupx,lupy        */
  227.                 16383, 16383,                /*            rdwx,rdwy        */
  228.                 15,                         /*    öÆÉF                    */
  229.                 8,                          /*    ìòÉF                    */
  230.                 7,